package com.banksystem.Util;  
import java.util.concurrent.TimeUnit;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; 
  
/** 
* @author 巫巫 2018年9月21日 
* 
* redis 操作工具类 
*/ 
@Component
public class RedisUtil{ 
	
    @Autowired
    private RedisTemplate<String, Object>  redisTemplate;  
      
//    public RedisTemplate<Object,Object> getInstance(){  
//        return redisTemplate;  
//    }  
      
    /** 
     * 设置 String 类型 key-value 
     * @param key 
     * @param value 
     */  
    public void set(String key,Object value){  
        redisTemplate.opsForValue().set(key, value);  
    }  
      
      
    /** 
     * 获取 String 类型 key-value 
     * @param key 
     * @return 
     */  
    public Object get(String key){  
        return redisTemplate.opsForValue().get(key);  
    }  
      
    /** 
     * 设置 String 类型 key-value 并添加过期时间 (秒为单位) 
     * @param key 
     * @param value 
     * @param time 过期时间,秒为单位 
     */  
    public void set(String key,Object value,long time){  
        redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);  
    }  
      
    /** 
     * 如果 key 存在则覆盖,并返回旧值. 
     * 如果不存在,返回null 并添加 
     * @param key 
     * @param value 
     * @return 
     */  
    public Object getAndSet(String key,String value){  
        return (String) redisTemplate.opsForValue().getAndSet(key, value);  
    }  
  
      
      
    /** 
     * 给一个指定的 key 值附加过期时间 
     * @param key 
     * @param time 
     * @param type 
     * @return 
     */  
    public boolean expire(String key,long time,TimeUnit type){  
        return redisTemplate.boundValueOps(key).expire(time, type);  
    }  
      
    /** 
     * 移除指定key 的过期时间 
     * @param key 
     * @return 
     */  
    public boolean persist(String key){  
        return redisTemplate.boundValueOps(key).persist();  
    }  
      
      
    /** 
     * 获取指定key 的过期时间 
     * @param key 
     * @return 
     */  
    public Long getExpire(String key){  
        return redisTemplate.boundValueOps(key).getExpire();  
    }  
      
    /** 
     * 修改 key 
     * @param key 
     * @return 
     */  
    public void rename(String key,String newKey){  
        redisTemplate.boundValueOps(key).rename(newKey);  
    }  
      
    /** 
     * 删除 key-value 
     * @param key 
     * @return 
     */  
    public void delete(String key){  
        redisTemplate.delete(key);
    }  
}  